package gsql

import (
	"fmt"
)

type Clause struct {
	pred any
	args []any
}

func (c *Clause) ToSql(b *Builder) (e error) {
	return b.Builder(c.pred, c.args...)
}

// cols
type Columns []Clause

func (cols *Columns) ToSql(b *Builder) (e error) {
	fmt.Println(">>> 构建Columnns")
	for i, v := range *cols {
		e = b.Builder(v.pred, v.args...)
		if e != nil {
			return e
		}

		// 添加`,`分隔符
		if i < len(*cols)-1 {
			b.Builder(",")
		}
	}

	return e
}

// 追加数据到`Columns`
func (cols *Columns) Append(columns ...any) {
	for _, pred := range columns {

		// 字符串
		*cols = append(*cols, Clause{
			pred: pred,
		})

		// Clause类型

	}
}

// table
type Form Clause

func (f *Form) ToSql(b *Builder) (e error) {
	return b.Builder(f.pred, f.args...)
}

// func (clause *Columns) ToSql() (string, error) {
// 	s := strings.Join(clause.list, ", ")
// 	return s, nil
// }

// type Form struct {
// 	table string
// }

// func (clause *Form) ToSql() (string, error) {
// 	return clause.table, nil
// }

// type Joins []Join
// type Join struct {
// 	sql  string
// 	args []any
// }

// func (clause *Joins) ToSql() (string, []any, error) {
// 	return "", nil, nil
// }

// func (clause *Joins) Append(join string, args ...any) {
// 	*clause = append(*clause, Join{
// 		sql:  join,
// 		args: args,
// 	})
// }

// type Where struct {
// }

// // todo
// func (clause *Where) ToSql() (string, error) {
// 	return "", nil
// }

// type GroupBy struct {
// }

// func (clause *GroupBy) ToSql() (string, []any, error) {
// 	return "", nil, nil
// }

// type OrderBy struct {
// }

// func (clause *OrderBy) ToSql() (string, []any, error) {
// 	return "", nil, nil
// }
